package com.mqy.spring.cglib;

import com.mqy.spring.jdkproxy.LogUtils;
import com.mqy.spring.jdkproxy.TransactionUtils;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

import java.lang.reflect.Method;

/**
 * @author 13159 //作者
 * @version V1.0 //版本
 * @Project 2022.3.4SpringProxy
 * @Package com.mqy.spring.cglib
 * @Description:
 * @Date 2022/3/4 15:49//日期
 * @Motto:放下杂念,只为迎接明天更好的自己
 */

public class CgLibFactory {

    public static  CartServiceImpl cartService(){
        CartServiceImpl cartService = new CartServiceImpl();
        Enhancer enh = new Enhancer();/*cglib对象*/
        enh.setSuperclass(CartServiceImpl.class);//父类,要创建谁的
        enh.setCallback(new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                System.out.println("CgLibFactory中的方法invoke执行了");
                /*开启事务*/
                TransactionUtils.start();
                /*执行原始代码  并获取原始结果*/
                Object invoke = method.invoke(cartService, objects);
                /*提交事务*/
                TransactionUtils.commit();

                /*日志*/
                LogUtils.addLog();


                return invoke;/*返回的原始结果*/

            }
        });

        Object o = enh.create();
return  (CartServiceImpl) o;
    }

}






